The testing of software applications has become a critical bottleneck in the pipeline between developers and end users. The diversity of devices, operating systems, and web browsers, coupled with the rapid pace at which new versions of each become available, makes it extremely difficult to ensure compatibility and reliable operation of a new application with a significant portion of the possible combinations in a timely manner.